package com.ruoyi.hd.service.impl;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.hd.mapper.SqlUtils;
import com.ruoyi.hd.util.MapperUtils;
import io.netty.util.internal.ObjectUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.hd.mapper.HdCommodityTimeMapper;
import com.ruoyi.hd.domain.HdCommodityTime;
import com.ruoyi.hd.service.IHdCommodityTimeService;
import org.springframework.util.ObjectUtils;

/**
 * 商品记录管理Service业务层处理
 * 
 * @author ruoyi
 * @date 2022-07-19
 */
@Service
public class HdCommodityTimeServiceImpl implements IHdCommodityTimeService 
{
    @Autowired
    private HdCommodityTimeMapper hdCommodityTimeMapper;

    /**
     * 查询商品记录管理
     * 
     * @param id 商品记录管理主键
     * @return 商品记录管理
     */
    @Override
    public HdCommodityTime selectHdCommodityTimeById(Long id)
    {
        return hdCommodityTimeMapper.selectHdCommodityTimeById(id);
    }

    /**
     * 查询商品记录管理列表
     * 
     * @param hdCommodityTime 商品记录管理
     * @return 商品记录管理
     */
    @Override
    public List<HdCommodityTime> selectHdCommodityTimeList(HdCommodityTime hdCommodityTime)
    {
        return hdCommodityTimeMapper.selectHdCommodityTimeList(hdCommodityTime);
    }


    /**
     * 新增商品记录管理
     * 
     * @param hdCommodityTime 商品记录管理
     * @return 结果
     */
    @Override
    public int insertHdCommodityTime(HdCommodityTime hdCommodityTime)
    {
        hdCommodityTime.setCreateTime(DateUtils.getNowDate());
        return hdCommodityTimeMapper.insertHdCommodityTime(hdCommodityTime);
    }

    /**
     * 修改商品记录管理
     * 
     * @param hdCommodityTime 商品记录管理
     * @return 结果
     */
    @Override
    public int updateHdCommodityTime(HdCommodityTime hdCommodityTime)
    {
        hdCommodityTime.setUpdateTime(DateUtils.getNowDate());
        return hdCommodityTimeMapper.updateHdCommodityTime(hdCommodityTime);
    }

    /**
     * 批量删除商品记录管理
     * 
     * @param ids 需要删除的商品记录管理主键
     * @return 结果
     */
    @Override
    public int deleteHdCommodityTimeByIds(Long[] ids)
    {
        return hdCommodityTimeMapper.deleteHdCommodityTimeByIds(ids);
    }

    /**
     * 删除商品记录管理信息
     * 
     * @param id 商品记录管理主键
     * @return 结果
     */
    @Override
    public int deleteHdCommodityTimeById(Long id)
    {
        return hdCommodityTimeMapper.deleteHdCommodityTimeById(id);
    }


    /**
     * 查询商品记录管理
     *
     * @param ids 商品记录管理主键
     * @return 商品记录管理
     */
    @Override
    public List<HdCommodityTime> selectHdCommodityTimeByIds(Long [] ids)
    {
        return hdCommodityTimeMapper.selectHdCommodityTimeByIds(ids);
    }

    @Override
    public List<HdCommodityTime> selectHdCommodityTimeByDateTimeList(HdCommodityTime hdCommodityTime) {
        List<HdCommodityTime> hdCommodityTimes = selectSysFateType(hdCommodityTime);
        hdCommodityTimes.stream().forEach(item->{
            if(ObjectUtils.isEmpty(item.getPrice())){
                item.setPrice(new BigDecimal(0.00));
            }else {
                //保留两位小数且四舍五入
                item.setPrice(item.getPrice().setScale(2,BigDecimal.ROUND_HALF_UP));
            }
        });
        return hdCommodityTimes;
    }


    public List<HdCommodityTime> selectSysFateType(HdCommodityTime hdCommodityTime) {
        List<HdCommodityTime> result = new ArrayList<>();
        if(StringUtils.isNotEmpty(hdCommodityTime.getDateType())){
            List<SysDictData> collect = DictUtils.getDictCache("sys_date_type").stream().filter(item -> {
                return hdCommodityTime.getDateType().equals(item.getDictValue());
            }).collect(Collectors.toList());

            for (SysDictData sysDictData : collect) {

                if(sysDictData.getDictLabel().equals("昨天")){
                    return  hdCommodityTimeMapper.selectYesterdayy(hdCommodityTime);
                }else if(sysDictData.getDictLabel().equals("当天")){
                    return  hdCommodityTimeMapper.selectSameDay(hdCommodityTime);
                }else if (sysDictData.getDictLabel().equals("近7天")){
                    return  hdCommodityTimeMapper.selectSevenDay(hdCommodityTime);
                }else if(sysDictData.getDictLabel().equals("近30天")){
                    return hdCommodityTimeMapper.selectThirtyDay(hdCommodityTime);
                }else if(sysDictData.getDictLabel().equals("本月")){
                    return hdCommodityTimeMapper.selectThisMonth(hdCommodityTime);
                }else if(sysDictData.getDictLabel().equals("近六个月")){
                    return hdCommodityTimeMapper.selectSixMonth(hdCommodityTime);
                }else if(sysDictData.getDictLabel().equals("今年")){
                    return hdCommodityTimeMapper.selectThisYear(hdCommodityTime);
                }
            }
        }
        return result;
    }
}
